#include <stdio.h>
#include <string.h>

char *delete_chars(char*, char*);
void delete_char();
void delete_char2();
void delete_c();

/**
 * 题目：删除一个字符串中的指定字母，如：字符串 "aca"，删除其中的 a 字母。
*/
int main(int argc, char const *argv[])
{
    // char *s = "ac";
    // char str[] = "The entry page table is defined in main.c (1311). ";
    // printf("bf: %s\n", str);
    // printf("af: %s\n", delete_chars(str, s));

    delete_c();

    return 0;
}

char *delete_chars(char *str, char *c)
{
    // 用于存储要删除的字符的哈希表
    int hash[256] = {0}; // 使用256大小的数组来存储ASCII字符，初始化为0

    // 如果要删除的字符集为空，则直接返回原字符串
    if (c == NULL)
    {
        return str;
    }

    // 标记要删除的字符
    for(int i = 0; i < strlen(c); i++)
        hash[(unsigned char)c[i]] = 1;  // 将要删除的字符的ASCII码位置标记为1
    
    int index = 0; // 用于追踪当前的字符串索引
    // 通过遍历字符串来删除指定的字符
    for(int i = 0; i < strlen(str); i++)
    {
        // 如果当前字符不在要删除的字符集中，则保留该字符
        if (!hash[(unsigned char)str[i]])
        {
            str[index++] = str[i]; // 在字符串的末尾添加空字符，以表示字符串的结束
        }
    }

    str[index] = '\0';
    
    return str;
}

void delete_char()
{
    char c[1000];
    char e[1000];
    char d;
    int i = 0, j = 0;
    printf("请输入字符串：");
    fgets(c, (sizeof c / sizeof c[0]), stdin);
    printf("请输入删除的字符：");
    scanf("%c", &d);
    getchar();

    while (i<strlen(c))
    {
        if(c[i] != d)
        {
            e[j] = c[i];
            j++;
        }
        i++;
    }

    printf("删除后字符串：\n");
    for(int z = 0; z < j; z++)
        printf("%c", e[z]);

    printf("\n");
    
}

void delete_char2()
{
    char ch;
    char s[] = "I want to learn English.";
    int i, j;
    puts(s);
    printf("请输入要删除的字符：");
    scanf("%c", &ch);

    for (i = 0; s[i] != '\0'; i++)
    {
        if(s[i] == ch)
        {
            for (j = i; s[j] != '\0'; j++)
            {
                s[j] = s[j + 1];
            }
            s[j] = '\0';
        }
    }
    puts(s);
}

void delete_c()
{
    char str[100], ch;
    char s[100];
    memset(str, '\0', sizeof(str));
    memset(s, '\0', sizeof(s));
    gets(str);
    scanf("%c", &ch);

    int j = 0;
    for(int i = 0; i < strlen(str); i++)
    {
        if(str[i] != ch)
        {
            s[j] = str[i];
            j++;
        }
    }    
}